IF EXISTS (SELECT name
   FROM   sysobjects
   WHERE  name = 'proknjizi_popisni_dokument' AND type = 'P')
   DROP PROCEDURE [proknjizi_popisni_dokument]
GO

---------------------------------------------------------
--   Procedura za knjizenje popisnog dokumenta
---------------------------------------------------------
CREATE PROCEDURE dbo.[proknjizi_popisni_dokument]
    @ID_KOMISIJE numeric(7),
	@POSLOVNA_GODINA numeric(4),
	@SIFRA_PREDUZECA varchar(12),
	@SIFRA_SEKTORA varchar(12),
	@SIFRA_MAGACINA varchar(12),
	@REDNI_BROJ_POPISA numeric(10),
	@DATUM_POPISA datetime,
    @OK BIT OUTPUT
AS
 
 DECLARE
  @BROJ_ANALITIKA NUMERIC(5),
  @BROJ_TRANSAKCIJA INT,
  @PORUKA VARCHAR(100),
  @KOLICINA numeric(12,2),
	@SIFRA_GRUPE varchar(12),
	@SIFRA_ARTIKLA numeric(12),
	@KOLICINA_PO_POPISU numeric(12,2),
	@KOLICINA_U_KARTICI numeric(12,2),
	@NOVA_PROSECNA_CENA money,
	@NOVA_VR_UKUPNA money,
	@REDNI_BROJ_AN_MAG_KART numeric(10),
	@VR_UKUPNA money,
	@PROSECNA_CENA money

  SET @OK = 0
  IF(SELECT STATUS FROM POPISNI_DOKUMENT WHERE
	ID_KOMISIJE = @ID_KOMISIJE AND
	POSLOVNA_GODINA = @POSLOVNA_GODINA AND
	SIFRA_PREDUZECA = @SIFRA_PREDUZECA AND
	SIFRA_SEKTORA = @SIFRA_SEKTORA AND
	SIFRA_MAGACINA = @SIFRA_MAGACINA AND
	REDNI_BROJ_POPISA = @REDNI_BROJ_POPISA AND
	DATUM_POPISA = @DATUM_POPISA) <> 'F'
  BEGIN
    RAISERROR('Nije dozvoljeno knjizenje popisnog dokumenta koji nije u fazi formiranja!',11,2)
    RETURN
  END
  
  IF NOT EXISTS(SELECT REDNI_BROJ_ST_POPISA FROM STAVKE_POPISA
			WHERE
				ID_KOMISIJE = @ID_KOMISIJE AND
				POSLOVNA_GODINA = @POSLOVNA_GODINA AND
				SIFRA_PREDUZECA = @SIFRA_PREDUZECA AND
				SIFRA_SEKTORA = @SIFRA_SEKTORA AND
				SIFRA_MAGACINA = @SIFRA_MAGACINA AND
				REDNI_BROJ_POPISA = @REDNI_BROJ_POPISA AND
				DATUM_POPISA = @DATUM_POPISA)
	BEGIN
		RAISERROR('Nije dozvoljeno knjizenje popisnog dokumenta koji nema ni jednu stavku!',11,2)
		RETURN
	END
	
	IF(SELECT DATUM_KRAJA_POSLOVNE_GODINE FROM POSLOVNA_GODINA WHERE POSLOVNA_GODINA=@POSLOVNA_GODINA AND SIFRA_PREDUZECA=@SIFRA_PREDUZECA) < GETDATE()
	BEGIN
		RAISERROR('Nije dozvoljeno knjizenje popisnog dokumenta cija je poslovna godina zakljucena!',11,2)
	RETURN
	END
	
	IF @DATUM_POPISA > GETDATE()
	BEGIN
		RAISERROR('Nije dozvoljeno knjizenje popisnog dokumenta ciji je datum veci od danasnjeg!',11,2)
	RETURN
	END
    
  SET @BROJ_TRANSAKCIJA = @@TRANCOUNT

  IF @BROJ_TRANSAKCIJA = 0
  BEGIN TRANSACTION

    DECLARE cursPROKNJIZI CURSOR FOR SELECT SIFRA_GRUPE, SIFRA_ARTIKLA, KOLICINA_PO_POPISU, KOLICINA_U_KARTICI
	FROM STAVKE_POPISA
      WHERE
		ID_KOMISIJE = @ID_KOMISIJE AND
		POSLOVNA_GODINA = @POSLOVNA_GODINA AND
		SIFRA_PREDUZECA = @SIFRA_PREDUZECA AND
		SIFRA_SEKTORA = @SIFRA_SEKTORA AND
		SIFRA_MAGACINA = @SIFRA_MAGACINA AND
		REDNI_BROJ_POPISA = @REDNI_BROJ_POPISA AND
		DATUM_POPISA = @DATUM_POPISA
    OPEN cursPROKNJIZI
    FETCH NEXT FROM cursPROKNJIZI INTO @SIFRA_GRUPE, @SIFRA_ARTIKLA, @KOLICINA_PO_POPISU, @KOLICINA_U_KARTICI
    WHILE @@FETCH_STATUS = 0
    BEGIN

	SET @KOLICINA = @KOLICINA_PO_POPISU-@KOLICINA_U_KARTICI

	SELECT @REDNI_BROJ_AN_MAG_KART = COUNT(*) FROM ANALITIKA_MAGACINSKE_KARTICE
		WHERE
				SIFRA_PREDUZECA = @SIFRA_PREDUZECA AND
				SIFRA_SEKTORA = @SIFRA_SEKTORA AND
				SIFRA_MAGACINA = @SIFRA_MAGACINA AND
				SIFRA_GRUPE = @SIFRA_GRUPE AND
				SIFRA_ARTIKLA = @SIFRA_ARTIKLA AND
				POSLOVNA_GODINA = @POSLOVNA_GODINA
				
		SET @REDNI_BROJ_AN_MAG_KART = @REDNI_BROJ_AN_MAG_KART + 1

	SELECT @PROSECNA_CENA=PROSECNA_CENA,
	@VR_UKUPNA=VR_UKUPNA
	FROM MAGACINSKA_KARTICA
	WHERE
			SIFRA_PREDUZECA = @SIFRA_PREDUZECA AND
			SIFRA_SEKTORA = @SIFRA_SEKTORA AND
			SIFRA_MAGACINA = @SIFRA_MAGACINA AND
			SIFRA_GRUPE = @SIFRA_GRUPE AND
			SIFRA_ARTIKLA = @SIFRA_ARTIKLA AND
			POSLOVNA_GODINA = @POSLOVNA_GODINA

	IF @@ROWCOUNT=0
		BEGIN
		  RAISERROR('Ne postoji magacinska kartica sa takvim kljucem!',11,2)
		  IF @BROJ_TRANSAKCIJA = 0 ROLLBACK TRANSACTION
		  CLOSE cursPROKNJIZI
		  DEALLOCATE cursPROKNJIZI
		  RETURN
		END

	SET @NOVA_PROSECNA_CENA = (@VR_UKUPNA+@KOLICINA*@PROSECNA_CENA)/(@KOLICINA_PO_POPISU)
	SET @NOVA_VR_UKUPNA = (@KOLICINA_PO_POPISU)*@NOVA_PROSECNA_CENA - @VR_UKUPNA
	
	UPDATE MAGACINSKA_KARTICA
		SET
			PROSECNA_CENA = @NOVA_PROSECNA_CENA,
			VR_UKUPNA = VR_UKUPNA + @NOVA_VR_UKUPNA,
			KOL_UKUPNA = KOL_UKUPNA + @KOLICINA
	WHERE
		SIFRA_PREDUZECA = @SIFRA_PREDUZECA AND
		SIFRA_SEKTORA = @SIFRA_SEKTORA AND
		SIFRA_MAGACINA = @SIFRA_MAGACINA AND
		SIFRA_GRUPE = @SIFRA_GRUPE AND
		SIFRA_ARTIKLA = @SIFRA_ARTIKLA AND
		POSLOVNA_GODINA = @POSLOVNA_GODINA

	IF @KOLICINA>0
	UPDATE MAGACINSKA_KARTICA
		SET
			KOL_ULAZA=KOL_ULAZA+@KOLICINA
	WHERE
		SIFRA_PREDUZECA = @SIFRA_PREDUZECA AND
		SIFRA_SEKTORA = @SIFRA_SEKTORA AND
		SIFRA_MAGACINA = @SIFRA_MAGACINA AND
		SIFRA_GRUPE = @SIFRA_GRUPE AND
		SIFRA_ARTIKLA = @SIFRA_ARTIKLA AND
		POSLOVNA_GODINA = @POSLOVNA_GODINA
		
	IF @KOLICINA<0
	UPDATE MAGACINSKA_KARTICA
		SET
			KOL_IZLAZA=KOL_IZLAZA-@KOLICINA
	WHERE
		SIFRA_PREDUZECA = @SIFRA_PREDUZECA AND
		SIFRA_SEKTORA = @SIFRA_SEKTORA AND
		SIFRA_MAGACINA = @SIFRA_MAGACINA AND
		SIFRA_GRUPE = @SIFRA_GRUPE AND
		SIFRA_ARTIKLA = @SIFRA_ARTIKLA AND
		POSLOVNA_GODINA = @POSLOVNA_GODINA
	IF @@ERROR <> 0
	BEGIN
		SET @PORUKA = 'Greska pri izmeni podataka za magacinsku karticu za materijal ' +
		+ CAST(@SIFRA_GRUPE as varchar(12)) + ',' + CAST(@SIFRA_ARTIKLA as varchar(12)) + ',' +
		 + ' i magacin ' +  @SIFRA_PREDUZECA + ',' + @SIFRA_SEKTORA +
		 + ',' + @SIFRA_MAGACINA
		                
		RAISERROR(@poruka, 11, 2)
		IF @BROJ_TRANSAKCIJA = 0
		ROLLBACK TRANSACTION
		CLOSE cursPROKNJIZI
		DEALLOCATE cursPROKNJIZI
		RETURN
	END


		--ubacivanje u analitiku
		INSERT INTO ANALITIKA_MAGACINSKE_KARTICE 
		VALUES (@SIFRA_PREDUZECA,@SIFRA_SEKTORA,@SIFRA_MAGACINA,@SIFRA_GRUPE,@SIFRA_ARTIKLA,@POSLOVNA_GODINA,
				@REDNI_BROJ_AN_MAG_KART,null,null,null,
				GETDATE(),null,null,ABS(@KOLICINA),@NOVA_PROSECNA_CENA,ABS(@KOLICINA)*@NOVA_PROSECNA_CENA,null)

		IF @@ERROR <> 0
		BEGIN
		RAISERROR('Greska pri unosu podataka u analitiku magacinske kartice!', 11, 2)
		IF @BROJ_TRANSAKCIJA = 0 ROLLBACK TRANSACTION
		CLOSE cursPROKNJIZI
		DEALLOCATE cursPROKNJIZI
		RETURN
		END
      FETCH NEXT FROM cursPROKNJIZI INTO @SIFRA_GRUPE, @SIFRA_ARTIKLA, @KOLICINA_PO_POPISU, @KOLICINA_U_KARTICI
    END

	CLOSE cursPROKNJIZI
	DEALLOCATE cursPROKNJIZI

    UPDATE POPISNI_DOKUMENT
    SET
        STATUS = 'P'
    WHERE
		ID_KOMISIJE = @ID_KOMISIJE AND
		POSLOVNA_GODINA = @POSLOVNA_GODINA AND
		SIFRA_PREDUZECA = @SIFRA_PREDUZECA AND
		SIFRA_SEKTORA = @SIFRA_SEKTORA AND
		SIFRA_MAGACINA = @SIFRA_MAGACINA AND
		REDNI_BROJ_POPISA = @REDNI_BROJ_POPISA AND
		DATUM_POPISA = @DATUM_POPISA
    IF @@ERROR <> 0
    BEGIN
      RAISERROR('Greska pri izmeni statusa popisnog dokumenta',11,2)
      IF @BROJ_TRANSAKCIJA = 0 ROLLBACK TRANSACTION
      RETURN
    END
    IF @BROJ_TRANSAKCIJA = 0 COMMIT TRANSACTION

    SET @OK = 1
GO